package de.fhffm.gärtnerei.gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;

import de.fhffm.gärtnerei.tabellenModelle.AussaatTableModel;
import de.fhffm.gärtnerei.tabellenModelle.BewaesserungTableModel;
import de.fhffm.gärtnerei.tabellenModelle.DuengerTableModel;
import de.fhffm.gärtnerei.tabellenModelle.ErnteTableModel;
import de.fhffm.gärtnerei.tabellenModelle.PflanzeTableModel;
import de.fhffm.gärtnerei.tabellenModelle.WachstumTableModel;


public class HauptFenster implements ActionListener {
	
	private JMenuBar bar = new JMenuBar();
	private JMenu menuNeu = new JMenu("Neu");
	private JMenu menuBearbeiten = new JMenu("Bearbeiten");
	private JMenu menuFortschritt = new JMenu("Fortschritt");
	private JMenu menuBenutzer = new JMenu("Benutzer");
	private JMenu menuAbmelden = new JMenu("Abmelden");
	
	private JMenuItem itemNeuePflanze = new JMenuItem("Neue Pflanze");
	private JMenuItem itemNeueAussaat = new JMenuItem("Neue Aussaat");
	private JMenuItem itemNeuerDuenger = new JMenuItem("Neuer Dünger");
	private JMenuItem itemAussaatBearb = new JMenuItem("Aussaat Bearbeiten");
	private JMenuItem itemPflanzeBearb = new JMenuItem("Pflanze Bearbeiten");
	private JMenuItem itemDuengerBearb = new JMenuItem("Dünger Bearbeiten");
	private JMenuItem itemWachstum = new JMenuItem("Wachstum");
	private JMenuItem itemBewaesserung = new JMenuItem("Bewässerung");
	private JMenuItem itemErnte = new JMenuItem("Ernte");
	private JMenuItem itemNeuerBenutzer = new JMenuItem("Neuer Benutzer");
	private JMenuItem itemAbmelden = new JMenuItem("Abmelden");
	
	private JFrame hauptFenster = new JFrame();
	
	private JTable pflanzenTabelle = new JTable(new PflanzeTableModel());
	private JTable aussaatTabelle = new JTable(new AussaatTableModel());
	private JTable duengerTabelle = new JTable(new DuengerTableModel());
	private JTable wachstumTabelle = new JTable(new WachstumTableModel());
	private JTable bewaesserungTabelle = new JTable(new BewaesserungTableModel());
	private JTable ernteTabelle = new JTable(new ErnteTableModel());
	
	private JTabbedPane tabbPane = new JTabbedPane () ;
	
	private JButton btnAktualisieren = new JButton("Aktualisieren");
	
	private JPanel buttonPanel = new JPanel();
	private JPanel tabellenPanel = new JPanel();
	
	public HauptFenster(){
		
		hauptFenster.setTitle("Suche");	
		hauptFenster.setSize(1000,600);
		hauptFenster.setLocationRelativeTo(null);
		hauptFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		hauptFenster.setVisible(true);
		hauptFenster.setResizable(true);
		hauptFenster.setLayout(new BorderLayout());
		setzeMenuBar();

		setzeTabellen();
		
		buttonPanel.add(btnAktualisieren);
		btnAktualisieren.addActionListener(this);
		
		hauptFenster.add(buttonPanel,BorderLayout.SOUTH);

	}
	
	private void setzeMenuBar() {
		
		menuNeu.add(itemNeuePflanze);
		itemNeuePflanze.addActionListener(this);
		menuNeu.add(itemNeueAussaat);
		itemNeueAussaat.addActionListener(this);
		menuNeu.add(itemNeuerDuenger);
		itemNeuerDuenger.addActionListener(this);
		
		menuBearbeiten.add(itemPflanzeBearb);
		itemPflanzeBearb.addActionListener(this);
		menuBearbeiten.add(itemAussaatBearb);
		itemAussaatBearb.addActionListener(this);
		menuBearbeiten.add(itemDuengerBearb);
		itemDuengerBearb.addActionListener(this);
		
		menuFortschritt.add(itemWachstum);
		itemWachstum.addActionListener(this);
		menuFortschritt.add(itemBewaesserung);
		itemBewaesserung.addActionListener(this);
		menuFortschritt.add(itemErnte);
		itemErnte.addActionListener(this);
		
		menuBenutzer.add(itemNeuerBenutzer);
		itemNeuerBenutzer.addActionListener(this);
		
		menuAbmelden.add(itemAbmelden);
		itemAbmelden.addActionListener(this);
			
		
		bar.add(menuNeu);
		bar.add(menuBearbeiten);
		bar.add(menuFortschritt);
		bar.add(menuBenutzer);
		bar.add(menuAbmelden);
		
		hauptFenster.setJMenuBar(bar);
		
	}

	private void setzeTabellen() {
		tabbPane.add("Pflanze",new JScrollPane(pflanzenTabelle));
		tabbPane.add("Aussaat",new JScrollPane(aussaatTabelle));
		tabbPane.add("Dünger",new JScrollPane(duengerTabelle));
		tabbPane.add("Wachstum",new JScrollPane(wachstumTabelle));
		tabbPane.add("Bewässerung",new JScrollPane(bewaesserungTabelle));
		tabbPane.add("Ernten", new JScrollPane(ernteTabelle));

		tabbPane.setPreferredSize(new Dimension(800,500));
		tabellenPanel.add(tabbPane);
		hauptFenster.add(tabellenPanel, BorderLayout.CENTER);
		
	}

	public static void main(String[] args) {
		new HauptFenster();

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		Object obj = e.getSource();
		
		if(obj == btnAktualisieren){

			setzeTabellenNeu();
			
		}
		
		if(obj == itemNeuePflanze){
			new NeuePflanzeFenster();
		}
		if(obj == itemNeuerDuenger){
			new NeuerDuengerFenster();
		}
		
		if(obj == itemNeueAussaat){
			new NeueAussaatFenster();
		}
		
		if(obj == itemNeuerBenutzer){
			new NeuerMitarbeiterFenster();
		}
		
		if(obj == itemAbmelden){
			Object[] options = {"Tschüss","Nein"};
			int selected = JOptionPane.showOptionDialog(null,"Wollen Sie uns schon verlassen?", "Abmelden", JOptionPane.YES_NO_OPTION,
						   JOptionPane.QUESTION_MESSAGE, null , options ,options[1]);
			
			switch(selected){
			case 0: // Tschüss
				hauptFenster.dispose();
				break;
			case 1: // Nein
				// nix 
				break;
			}
		}
		
		if(obj == itemPflanzeBearb){
			new BearbeitenTabellenFenster(1);
		}
		
		if(obj == itemDuengerBearb){
			new BearbeitenTabellenFenster(2);
		}
		
		if(obj == itemAussaatBearb){
			new BearbeitenTabellenFenster(3);
		}
		
		if(obj == itemWachstum){
			new FortschrittTabellenFenster(1);
		}
		
		if(obj == itemBewaesserung){
			new FortschrittTabellenFenster(2);
		}
		
		if(obj == itemErnte){
			new FortschrittTabellenFenster(3);
		}
	}

	private void setzeTabellenNeu() {
		// Das im Moment ausgewählte Tab wird gespeichert
		// so das nach der Aktualisierung das tabbPane wieder
		// auf dieses gesetzt wird!
		int ausgewaehltesTab = tabbPane.getSelectedIndex();

		// Alle Komponenten werden Entfernt und wieder neu gesetzt
		hauptFenster.remove(tabellenPanel);
		tabellenPanel.removeAll();
		tabbPane.removeAll();
		
		pflanzenTabelle.setModel(new PflanzeTableModel());
		duengerTabelle.setModel(new DuengerTableModel());
		aussaatTabelle.setModel(new AussaatTableModel());
		wachstumTabelle.setModel(new WachstumTableModel());
		bewaesserungTabelle.setModel(new BewaesserungTableModel());
		ernteTabelle.setModel(new ErnteTableModel());
		
		tabbPane.add("Pflanze",new JScrollPane(pflanzenTabelle));
		tabbPane.add("Aussaat",new JScrollPane(aussaatTabelle));
		tabbPane.add("Dünger",new JScrollPane(duengerTabelle));
		tabbPane.add("Wachstum",new JScrollPane(wachstumTabelle));
		tabbPane.add("Bewässerung",new JScrollPane(bewaesserungTabelle));
		tabbPane.add("Ernten", new JScrollPane(ernteTabelle));
		
		tabellenPanel.add(tabbPane);
		hauptFenster.add(tabellenPanel, BorderLayout.CENTER);
		
		// Aufs vorherige Tabb setzen
		switch(ausgewaehltesTab){
		case 0: // Pflanzen Tab
			tabbPane.setSelectedIndex(0);
		break;
		case 1:// Dünger Tab
			tabbPane.setSelectedIndex(1);
			break;
		case 2:// Aussaat Tab
			tabbPane.setSelectedIndex(2);
			break;
		case 3: // Wachstum Tab
			tabbPane.setSelectedIndex(3);
			break;
		case 4:// Bewässerung Tab
			tabbPane.setSelectedIndex(4);
			break;
		case 5:// Ernte Tab
			tabbPane.setSelectedIndex(5);
			break;
			
		}

		tabbPane.updateUI();
	}
}
